package primary;

/**
 * Lambad 表达式 简化(用一次)使用
 */
public class L_Lambad {
    /*
    静态内部类, 使用的时候编译,不使用不编译
     */
    static class Test implements Runnable {
        /**
         * 线程入口
         */
        @Override
        public void run() {
            for (int i = 0; i < 20; i++) {
                System.out.println("一边听歌,噢噢噢噢");
            }
        }
    }

    public static void main(String[] args) {
        //常规 代理方式
        new Thread(new Test()).start();
        //使用匿名内部类的方式
        new Thread(new Runnable() {
            @Override
            public void run() {
                for (int i = 0; i < 20; i++) {
                    System.out.println("一边听歌,啊.............");
                }
            }
        }).start();
        //使用lambad 表达式写代码
        new Thread(() -> {
            System.out.println("使用lambda表达式");
        }).start();

        ILike like = () -> {//只能保证接口只有一个为实现的方法, 他便可以自动推导
            System.out.println("i like lambda3");
        };
        like.run();
        /**
         * 1. 如果 lambda 表达式的方法体内只有一行代码,则可以不用花括号,注意 ; 号也不能要
         * 2. 如果lambda 只有一个参数,则可以不用小括号
         * 3. lambad 可以省略参数的类型
         *
         */
        ILove il = (int a) -> {
            String msg = "i love you " + a + " times";
            System.out.println(msg);
            return msg;
        };
        il.love(50);

    }
}

interface ILike extends Runnable {
//    void print();
}

interface ILove {
    String love(int a);
}

